package com.vhall.component.entity.data.vo;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.vhall.component.entity.data.enums.DataStatusEnum;
import com.vhall.component.entity.page.vo.CommonPageVO;
import com.vhall.component.entity.room.enums.TerminalEnum;
import com.vhall.component.framework.common.annotation.ParamName;
import com.vhall.component.plugin.common.annotation.CheckTimeInterval;
import lombok.Data;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import java.io.Serializable;
import java.util.List;

/**
 * 数据统计查询条件
 *
 * @author kainan.li
 * @date 2021/4/26
 */
@Data
@CheckTimeInterval
public class UserParamVO extends CommonPageVO implements Serializable {

    /**
     * 此字段不由前端传
     */
    private Integer ilId;
    /**
     * 用户组织架构
     */
    private String orgCode;
    private List<Integer> ilIdList;

    @ParamName("room_id")
    @JsonProperty("room_id")
    private String roomId;

    @ParamName("start_time")
    @JsonProperty("start_time")
    @NotBlank(message = "begin_time开始时间不能为空")
    @Pattern(message = "开始时间格式应该为yyyy-MM-dd", regexp = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))")
    private String startTime;

    @ParamName("end_time")
    @JsonProperty("end_time")
    @NotBlank(message = "end_time结束时间不能为空")
    @Pattern(message = "结束时间格式应该为yyyy-MM-dd", regexp = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))")
    private String endTime;

    /**
     * 1 全部  2直播中  3直播回放
     * {@link  DataStatusEnum}
     */
    @NotBlank(message = "status 不能为空")
    @Range(min = 1, max = 3)
    private String status;

    private String accountId;

    /**
     * 国家
     */
    private String ctry;

    /**
     * 终端
     * {@link TerminalEnum}
     */
    private List<Integer> terminals;

    /**
     * 数据来源 1-直播房间数据 2-互动房间数据
     */
    private Integer type;
    /**
     * 翻页的开始
     */
    private Integer startIndex;
    /**
     *
     */
    @ParamName("sort_key")
    @JsonProperty("sort_key")
    private String sortKey;

    /**
     * 4 升序 asc
     * 3 降序 desc
     */
    @ParamName("sort_type")
    @JsonProperty("sort_type")
    private Integer sortType;

}
